function [singu]=ordenaPolosyZeros(polosIn,zerosIn)
    
    polosConj=polosIn(imag(polosIn)~=0);
    polosReal=polosIn(imag(polosIn)==0);
    numzerosReal=length(zerosIn(zerosIn==0));
    zerosConj=zerosIn(zerosIn~=0);
    zerosConj;
    cantPolosConj=length(polosConj);
    singu=struct('polos1','polos2','zeros1','zeros2');
    m=0;
    for m=1:cantPolosConj
       indicezeros=0;

       indicepolos=buscaMaximoQ(polosConj);
       dist=inf;
       selecconj=1;
       
       for k=1:length(zerosConj)
       
           if abs(zerosConj(k)-polosConj(indicepolos))<dist
               indicezeros=k;
               dist=abs(zerosConj(k)-polosConj(indicepolos));
           end
       end
       
       if abs(polosConj(indicepolos))<dist && numzerosReal>0
            dist=abs(polosConj(indicepolos));
            selecconj=0;
       end
       
           singu(m).polos1=polosConj(indicepolos);
           singu(m).polos2=conj(singu(m).polos1);
           polosConj(indicepolos)=[];
       
       if indicezeros~=0 || selecconj==0
           if selecconj~=0
               singu(m).zeros1=zerosConj(indicezeros);
               singu(m).zeros2=conj(singu(m).zeros1);
                zerosConj(indicezeros)=[];
           else
               singu(m).zeros1=0;
               if numzerosReal>1
                   singu(m).zeros2=0;
                   numzerosReal=numzerosReal-2;
               else
                   singu(m).zeros2=[];
                   numzerosReal=numzerosReal-1;
               end
               
           end
       
       else
           singu(m).zeros1=[];
           singu(m).zeros2=[];
       end
    end
    
    if isempty(m)
        m=0;
    end
    l=1;
    while ~isempty(polosReal)
        
        indicepolos=buscaMinimoReal(polosReal);
        polosReal(indicepolos);
        singu(m+l).polos1=polosReal(indicepolos);
        polosReal(indicepolos)=[];
        
        if ~isempty(polosReal)
            
            indicepolos=buscaMinimoReal(polosReal);
            singu(m+l).polos2=polosReal(indicepolos);
            polosReal(indicepolos)=[];
            
            polorel=(singu(m+l).polos2+singu(m+l).polos2)/2;
            
            
            indicezeros=0;
            dist=inf;
            selecconj=1;
       
            for k=1:length(zerosConj)
            
                if abs(zerosConj(k)-polorel)<dist
                   indicezeros=k;
                   dist=abs(zerosConj(k)-polorel);
                end
            end
       
            if abs(polorel)<dist && numzerosReal>0
                dist=abs(polorel);
                selecconj=0;
            end
            
            
            if indicezeros~=0 || selecconj==0
                if selecconj~=0
                   singu(m+l).zeros1=zerosConj(indicezeros);
                   singu(m+l).zeros2=conj(singu(m+l).zeros1);
                    zerosConj(indicezeros)=[];
                else
                   singu(m+l).zeros1=0;
                   if numzerosReal>1
                       singu(m+l).zeros2=0;
                       numzerosReal=numzerosReal-2;
                   else
                       singu(m+l).zeros2=[];
                       numzerosReal=numzerosReal-1;
                   end
                end
               
            
       
            else
                singu(m+l).zeros1=[];
                singu(m+l).zeros2=[];
            end
            
        else
            singu(m+l).polos2=[];
            if numzerosReal>0
                singu(m+l).zeros1=0;
                
            else
                singu(m+l).zeros1=[];
            end
            singu(m+l).zeros2=[];
            
        end
        l=l+1;
    end
    
    
    
    
    
    

end

function indicepolos=buscaMinimoReal(polos)

    polomin=inf;
    indicepolos=0;
    for k=1:length(polos)
        if abs(polos(k))<polomin
            polomin=abs(polos(k));
            indicepolos=k;
        end
    end

end


function indicepolos=buscaMaximoQ(polos)
    q=0;
    indicepolos=0;
    for k=1:length(polos)
    
        if abs(polos(k))/abs(real(polos(k)))>q
            q=abs(polos(k))/abs(real(polos(k)));
            indicepolos=k;
        end
        
    end

end